# urllib 包 包含以下几个模块：
#
# urllib.request - 打开和读取 URL。
# urllib.error - 包含 urllib.request 抛出的异常。
# urllib.parse - 解析 URL。
# urllib.robotparser - 解析 robots.txt 文件。

from urllib import request, error, parse, robotparser



'''
    url：url 地址。
    data：发送到服务器的其他数据对象，默认为 None。
    timeout：设置访问超时时间。
    cafile 和 capath：cafile 为 CA 证书， capath 为 CA 证书的路径，使用 HTTPS 需要用到。
    cadefault：已经被弃用。
    context：ssl.SSLContext类型，用来指定 SSL 设置。
'''
url = "https://www.runoob.com/"
try:
    # 打开一个URL
    myurl = request.urlopen(url)
    # 打开文件
    f = open("urllib_test.html", "wb")
    # 读取网页的内容
    content = myurl.read()
    # 将内容写入 html 文件
    f.write(content)
    # 关闭io
    f.close()
except Exception as e:

# except error.HTTPError as e:
    print(e)


# URL 的编码与解码可以使用 urllib.request.quote() 与 urllib.request.unquote() 方法
# url编码
encode_url = request.quote(url)
print(encode_url)
# url解码
decode_url = request.unquote(encode_url)
print(decode_url)


# 模拟头部信息
# 我们抓取网页一般需要对 headers（网页头信息）进行模拟，这时候需要使用到 urllib.request.Request 类：
#
# class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
# url：url 地址。
# data：发送到服务器的其他数据对象，默认为 None。
# headers：HTTP 请求的头部信息，字典格式。
# origin_req_host：请求的主机地址，IP 或域名。
# unverifiable：很少用整个参数，用于设置网页是否需要验证，默认是False。。
# method：请求方法， 如 GET、POST、DELETE、PUT等。

